package collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

/**
 * JDK8之后集合推出了一个新的方法:foreach,可以使用lambda表达式进行遍历。
 * 如果一个集合是并发安全的集合，使用foreach方法遍历是可以和增删元素互斥的。
 * 注:
 * 哪怕是一个并发安全的集合，迭代器方式遍历也不和增删元素互斥，只能自行使用同步块
 * 维护互斥关系。
 * 
 * 我们常用的集合实现类:ArrayList,LinkedList,HashSet都不是线程安全的。
 * @author 范传奇
 *
 */
public class ForeachDemo {
	public static void main(String[] args) {
		//JDK7之后，实例化集合时，泛型可以只写<>,而不用再写一遍实际类型。
		Collection<String> c = new ArrayList<>();
		c.add("one");
		c.add("two");
		c.add("three");
		c.add("four");
		c.add("five");
		System.out.println(c);
		
		for(String s : c) {
			System.out.println(s);
		}
		
		c.forEach(
			(e)->System.out.println(e)	
		);
		
		
		/*
		 * 将现有的集合转换为并发安全的集合
		 */
		List<String> list = new ArrayList<>();
		list.add("1");
		list.add("2");
		list.add("3");
		System.out.println(list);
		//将给定的list集合转换为线程安全的list集合
		list = Collections.synchronizedList(list);
		System.out.println(list);		
		/*
		 * 同样的也有synchronizedSet方法，可以将一个set集合转换为线程安全的
		 * 
		 */
		
				
		
		
	}
}




